package cn.campus.dao.article;

import cn.campus.pojo.article.dto.ArticleDTO;
import cn.campus.pojo.article.po.Article;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @Description: 文章数据持久化访问接口
 * @Author: linyanbin
 * @Date: 2018/9/16 0016 16:34
 */
public interface ArticleMapper {
    /**
     * 添加文章
     * @param article 文章实体类
     * @return 受影响行数
     */
    int insertArticle(Article article);

    /**
     * 更新文章
     * @param article 文章实体类
     * @return 受影响行数
     */
    int updateArticle(Article article);

    /**
     * 根据id删除文章
     * @param articleId 文章ID
     * @return 受影响行数
     */
    int deleteArticleById(String articleId);

    /**
     * 根据id查询文章，单表查询
     * @param articleId
     * @return 文章实体类
     */
    Article findArticleById(String articleId);

    /**
     * 根据id查询文章，联合查询文章、用户并统计文章的评论数
     * @param articleId
     * @return 文章实体类
     */
    ArticleDTO unionFindArticleById(String articleId);

    /**
     * 修改文章状态
     * @param articleId 文章ID
     * @return 受影响行数
     */
    int updateStatusById(@Param("articleId") String articleId, @Param("status") Integer status);

    /**
     * 分页查找文章，单表
     * @param page 当前页
     * @param size 页记录数
     * @return 文章列表
     */
    List<Article> findList(@Param("page") Integer page, @Param("size") Integer size);

    /**
     * 分页查找文章，多表: 文章、用户，并统计文章的评论数
     * @param page 当前页
     * @param size 页记录数
     * @return 文章列表
     */
    List<ArticleDTO> unionFindList(@Param("page") Integer page, @Param("size") Integer size);

    /**
     * 统计记录数
     * @return
     */
    long count();

    /**
     * 更新文章访问量
     * @param articleId
     * @param viewCount
     */
    void updateViewCount(@Param("articleId") String articleId, @Param("viewCount") Integer viewCount);

    /**
     * 获取某篇文章的访问量
     * @param articleId
     * @return
     */
    int getViewCount(String articleId);
}
